import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;

public class Leitura extends Identificador implements RetanguloListener,
		IElementosChegadaPartida, IOperadoresComTexto {

	/**
	 * @uml.property name="paralelogramo"
	 */
	private GeneralPath paralelogramo;

	/**
	 * @uml.property name="ligacaoSaida"
	 * @uml.associationEnd inverse="leitura:Ligacao"
	 */

	private LigacaoIdentificadorDestino ligacoes;

	/**
		 */
	public Leitura(String identificacao, Retangulo retanguloEnvolvente) {
		super(identificacao, retanguloEnvolvente);
	}

	/**
			 */
	public Leitura(Retangulo retanguloEnvolvente) {
		super(retanguloEnvolvente);
		retanguloEnvolvente.setRetanguloListener(this);
		construirLeitura();
	}

	/**
				 */
	public void construirLeitura() {
		int x = retanguloEnvolvente.getPontoSuperiorEsquerdo().getX();
		int y = retanguloEnvolvente.getPontoSuperiorEsquerdo().getY();
		int largura = retanguloEnvolvente.getTamanho().getLargura();
		int altura = retanguloEnvolvente.getTamanho().getAltura();
		this.paralelogramo = new GeneralPath();
		this.paralelogramo.moveTo(x + 15, y);
		this.paralelogramo.lineTo(x + altura, y);
		this.paralelogramo.lineTo(x + altura - 15, y + largura);
		this.paralelogramo.lineTo(x, y + largura);
		this.paralelogramo.lineTo(x + 15, y);
		this.paralelogramo.closePath();
	}

	@Override
	public void retanguloAlterado() {
		construirLeitura();
	}

	/**
		 */
	public void desenhar(Graphics graphics) {
		Graphics2D g2 = (Graphics2D) graphics.create();
		g2.draw(paralelogramo);
		g2.setColor(Color.black);
		g2.drawString(identificacao, this.retanguloEnvolvente
				.getPontoSuperiorEsquerdo().getX() + 10,
				this.retanguloEnvolvente.getPontoSuperiorEsquerdo().getY() + 15);

		g2.dispose();
	}

	/**
			 */
	public boolean isSob(Coordenada coordenada) {
		return this.retanguloEnvolvente.contem(coordenada);
	}

	@Override
	public LigacaoIdentificadorDestino associar(
			Identificador identificadorDestino) {
		this.ligacoes = new LigacaoIdentificadorDestino(this,
				identificadorDestino);
		return ligacoes;
	}

	@Override
	public boolean podeAssociar(Identificador identificador) {
		if (ligacoes == null && identificador != this)
			return true;
		return false;
	}

}
